import axios from "axios";
import getErrorText from "./errorCode.ts";
import {getToken} from "@/utils/auth.ts";
import {ElMessage} from "element-plus";

// 是否显示重新登录
export let isRelogin = {show: false};

// 创建一个axios实例
const service = axios.create({
    // axios中请求配置有baseURL选项，表示请求URL公共部分
    baseURL: import.meta.env.VITE_APP_BASE_API,
    // 超时
    timeout: 10000
})


// request拦截器
service.interceptors.request.use(config => {
    // 是否需要设置 token
    const isToken = (config.headers || {}).isToken === false
    // 是否需要防止数据重复提交
    const isRepeatSubmit = (config.headers || {}).repeatSubmit === false
    // 判断是否需要设置 token
    if (getToken() && !isToken) {
        config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
    }
    // get 请求映射 params 参数
    if (config.method === 'get' && config.params) {
        // let url = config.url + '?' + tansParams(res.data.params)
    }
    return config
}, error => {
    console.log(error)
    Promise.reject(error)
})

// response 拦截器
service.interceptors.response.use((res) => {
    // 获取状态码
    const code = res.data.code || 200 // code为200表示成功，其他是失败
    // 获取 msg 信息
    const msg = res.data.msg || getErrorText(code)
    res.data.msg = msg
    console.log("response 拦截器", res)
    if (code === 500) {
        ElMessage({ message: msg, type: 'error' })
        return Promise.reject(new Error(msg))
    } else {
        return Promise.resolve(res.data)
    }
}, (error) => {
    console.error('err ==> ' + error)
    let {message} = error
    if (message == "Network Error") {
        message = "后端接口连接异常";
    } else if (message.includes("timeout")) {
        message = "系统接口请求超时";
    } else if (message.includes("Request failed with status code")) {
        message = "系统接口" + message.substr(message.length - 3) + "异常";
    }
    ElMessage({ message: message, type: 'error', duration: 5 * 1000 })
    return Promise.reject(error)
})

export default service


// 1. 提示 process 未找到
/*
*  在 vite.config.ts 中添加
*   define: {
            'process.env': process.env
        }
*
* */
